#pragma once

#include <condition_variable>
#include <mutex>

class Semaphore
{
public:
	Semaphore(unsigned long count = 0);
	Semaphore(const Semaphore&) = delete;
	Semaphore& operator=(const Semaphore&) = delete;
	void Signal();
	void Wait();
private:
	std::mutex m_mutex;
	std::condition_variable m_cv_uptr;
	unsigned long m_count;
};